<?php

namespace App\Http\Controllers\SystemManagement;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\Constant\Fields;
use App\Models\SystemManagement\SkillJob;
use App\Models\Constant\Errors;
use App\Models\Error;

/**
 * @group 职级工作内容管理
 *
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */

class SkillJobController extends Controller
{
    /**
     * 职级工作内容查看列表
     *
     * @queryParam  skill_id int 职级id 外键 职级表
     * @queryParam  content string 工作内容
     * @queryParam  unit string 任务单位
     * @queryParam  number int 任务量
     * @queryParam  cycle_unit string 周期单位
     * @queryParam  cycle int 任务周期
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $skillJob = new SkillJob;
        $data = $skillJob->getList($request);
        return response()->json(encodeMsg($data,200));
    }

    /**
     * 新增职级工作内容
     *
     * json格式传值 {}
     * @bodyParam  skill_id int required 职级id 外键 职级表
     * @bodyParam  content string required 工作内容
     * @bodyParam  unit string required 任务单位
     * @bodyParam  number int required 任务量
     * @bodyParam  cycle_unit string required 周期单位
     * @bodyParam  cycle int required 任务周期
     *
     * @queryParam  skill_id int 职级id 外键 职级表
     * @queryParam  content string 工作内容
     * @queryParam  unit string 任务单位
     * @queryParam  number int 任务量
     * @queryParam  cycle_unit string 周期单位
     * @queryParam  cycle int 任务周期
     *
     * @return \Illuminate\Http\Response
     */
    public function store(Request $request)
    {
        try {
            $data = $request->all();
            SkillJob::insert($data);
            return response()->json(encodeMsg($data,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '职级内容信息添加失败!'],400));
        }
    }

    /**
     * 查看职级工作内容
     *
     * @bodyParam  skill_id int required 职级工作内容ID
     *
     * @queryParam  skill_id int 职级id 外键 职级表
     * @queryParam  content string 工作内容
     * @queryParam  unit string 任务单位
     * @queryParam  number int 任务量
     * @queryParam  cycle_unit string 周期单位
     * @queryParam  cycle int 任务周期
     *
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $data = SkillJob::where('skill_id',$id)->get();
        if($data == []) {
            return response()->json(encodeMsg(["message" => "没有该职级内容信息!"], 404));
        } else {
            return response()->json(encodeMsg($data,200));
        }
    }

    /**
     * 修改职级工作内容
     *
     * @bodyParam  id int required 职级工作内容ID
     * @bodyParam  skill_id int required 职级id 外键 职级表
     * @bodyParam  content string required 工作内容
     * @bodyParam  unit string required 任务单位
     * @bodyParam  number int required 任务量
     * @bodyParam  cycle_unit string required 周期单位
     * @bodyParam  cycle int required 任务周期
     *
     * @queryParam  skill_id int 职级id 外键 职级表
     * @queryParam  content string 工作内容
     * @queryParam  unit string 任务单位
     * @queryParam  number int 任务量
     * @queryParam  cycle_unit string 周期单位
     * @queryParam  cycle int 任务周期
     *
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        $skillJob = SkillJob::where('skill_id',$id)->get();
        if($skillJob == []) {
            return response()->json(encodeMsg(["message" => "没有该职级内容信息!"], 404));
        }
        try {
            $data = $request->all();
            foreach ($data as $key => $value) {
                if(!isset($value['id']) || empty($value['id'])){
                    SkillJob::create($value);
                }else{
                    SkillJob::where(['skill_id'=>$id,'id'=>$value['id']])->update($value);
                }
            }
            return response()->json(encodeMsg($skillJob,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '职级内容信息修改失败!'],400));
        }
    }

    /**
     * 删除职级工作内容
     *
     * @bodyParam id int required  职级工作内容ID
     * @response 204 {
     *   "message": "职级信息删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该职级信息"
     * }
     */
    public function destroy($id)
    {
        $skillJob = SkillJob::find($id);
        if($skillJob == []) {
            return response()->json(encodeMsg(["message" => "没有该职级内容信息!"], 404));
        }
        if($skillJob->delete()) {
            return response()->json(encodeMsg(["message" => "职级内容信息删除成功!"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "职级内容信息删除失败!"], 400));
        }
    }

    /**
     * 批量删除职级工作内容
     *
     * @param  int  $ids id集合字符串 如:1,2,3,4
     * @return \Illuminate\Http\Response
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        SkillJob::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "职级内容信息删除成功!"], 204));
    }

    /**
     * 批量恢复职级工作内容
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     * @bodyParam ids array 职级ID,批量恢复+单条恢复,以数组形式
     *
     * @response  204 {"code":204,"msg":"deleted","data":"恢复成功"}
     * @response  400 {"code":400,"msg":"failed","data":"恢复失败/数据格式错误"}
     */
    public function rec(Request $request){
        $ids = $request->input('ids');
        if(is_null($ids) || !is_array($ids)){
            return response()->json(encodeMsg(["message" => "数据格式错误!"], 400));
        }
        try{
            SkillJob::recover($ids);
            return response()->json(encodeMsg(["message" => "恢复成功!"], 204));
        }catch (\Exception $e){
            return response()->json(encodeMsg(["message" => "恢复失败!"], 400));
        }
    }

}
